import proxy.DynamicProxyHandler;
import service.ProductService;
import service.UserService;
import service.impl.ProductServiceImpl;
import service.impl.UserServiceImpl;

/**
 * 动态代理模式演示
 */
public class DynamicProxyDemo {
    public static void main(String[] args) {
        System.out.println("=== 用户服务动态代理 ===");
        
        // 创建真实用户服务
        UserService realUserService = new UserServiceImpl();
        
        // 创建动态代理（管理员权限）
        UserService userServiceProxy = DynamicProxyHandler.createProxy(realUserService, "admin");
        userServiceProxy.addUser("动态用户", "password123");
        userServiceProxy.getUser("动态用户");
        
        System.out.println("\n=== 商品服务动态代理 ===");
        
        // 创建真实商品服务
        ProductService realProductService = new ProductServiceImpl();
        
        // 创建动态代理（普通用户权限）
        ProductService productServiceProxy = DynamicProxyHandler.createProxy(realProductService, "user");
        
        try {
            productServiceProxy.addProduct("新商品"); // 会抛出权限异常
        } catch (SecurityException e) {
            System.out.println("捕获异常: " + e.getMessage());
        }
        
        productServiceProxy.getProduct("手机"); // 可以正常查询
    }
}